package com.cq.base.common

import android.text.TextUtils
import java.math.BigDecimal
import java.nio.charset.Charset
import java.text.NumberFormat
import kotlin.math.ceil
import kotlin.math.floor

/**
 * 作者: CQ
 * 日期: 2021-04-07
 * 说明:常用工具类
 */
object NumberUtils {

    /**
     * 获取数据字节长度
     */
    fun getBytesLength(text: String): Int {
        return text.toByteArray(Charset.forName("GB2312")).size
    }

    /**
     * 进一法
     * a：除数
     * b：被除数
     */
    fun getCeil(a: Int, b: Int): Int {
        return ceil(a.toDouble() / b.toDouble()).toInt()
    }

    /**
     * 退一法
     * a：除数
     * b：被除数
     */
    fun getFloor(a: Int, b: Int): Int {
        return floor(a.toDouble() / b.toDouble()).toInt()
    }

    /**
     * 自动换行，最后一行不换行
     * str：原字符串
     * sub：换行长度
     */
    fun onAutoWrap(str: String, sub: Int): String? {
        var str1 = ""
        val s = str.toCharArray()
        val end = StringBuilder()
        for (i in s.indices) {
            if (getBytesLength(str1) + getBytesLength(
                    s[i].toString()
                ) >= sub
            ) {
                end.append(str1)
                str1 = ""
                if (i < s.size - 1) {
                    end.append("\n")
                }
            }
            str1 += s[i]
            if (i == s.size - 1) {
                end.append(str1)
            }
        }
        return end.toString()
    }

    /**
     * 获取字符串的最后一行
     */
    fun getLastLineString(str: String): String? {
        if (str.contains("\n")) {
            val result = str.split("\n".toRegex()).toTypedArray()
            return result[result.size - 1]
        }
        return str
    }

    fun getMyDouble2(str: String?): String? {
        var str = str
        if (TextUtils.isEmpty(str)) str = "0.00"
        var bd = BigDecimal(str)
        bd = bd.setScale(
            2,
            BigDecimal.ROUND_HALF_UP
        ) // 保留两个位小数点（BigDecimal.ROUND_HALF_UP = 四舍五入）
        return bd.toString()
    }

    /**
     * 小数为0,保留整数,不为0,保留小数
     *
     * @param d
     * @return
     */
    fun getBZDQZ(d: String?): String? {
        val numberFormat = NumberFormat.getNumberInstance()
        numberFormat.isGroupingUsed = false //设置了以后不会有千分位，如果不设置，默认是有的
        return numberFormat.format(java.lang.Double.valueOf(d!!))
    }

    /**
     * 小数为0,保留整数,不为0,保留小数
     *
     * @param d
     * @return
     */
    fun getBZDQZ(d: Double): String? {
        val numberFormat = NumberFormat.getNumberInstance()
        numberFormat.isGroupingUsed = false //设置了以后不会有千分位，如果不设置，默认是有的
        return numberFormat.format(d)
    }


}